package cn.z2huo.demo.activiti.service;

import cn.z2huo.demo.activiti.enums.BpmProcessEnum;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;

import java.util.List;
import java.util.Map;

public interface ActivitiService {

    /**
     * <p>启动流程实例
     * @param processEnum 流程
     * @param businessKey 业务单号
     */
    ProcessInstance startProcess(BpmProcessEnum processEnum, String businessKey);

    /**
     * <p>获取某流程下正在执行的任务信息
     * @param processEnum   流程
     * @param businessKey   业务单号
     * @param processInstanceId 流程实例ID
     * @param taskId    任务ID
     */
    Task getTaskInfo(BpmProcessEnum processEnum, String businessKey,
                     String processInstanceId, String taskId);

    /**
     * <p>获取指定实例流程下指定用户正在受理的任务信息
     * @param processEnum   流程
     * @param businessKey   业务单号
     * @param processInstanceId 流程实例ID
     * @param assignee  受理人用户代码
     */
    List<Task> listTaskByAssignee(BpmProcessEnum processEnum, String businessKey,
                                  String processInstanceId, String assignee);

    /**
     * <p>获取指定实例流程的指定节点下指定用户正在受理的任务信息
     * @param processEnum   流程
     * @param businessKey   业务单号
     * @param processInstanceId 流程实例ID
     * @param assignee  受理人用户代码
     * @param taskName  任务节点名称
     */
    Task listTaskByAssignee(BpmProcessEnum processEnum, String businessKey,
                                  String processInstanceId, String assignee, String taskName);



    /**
     * <p>办理任务
     * @param taskId    任务ID
     * @param variables 流程变量
     */
    void handleTask(String taskId, Map<String, Object> variables);

    /**
     * <p>移交任务
     * @param processEnum   流程ID
     * @param businessKey   业务单号
     * @param processInstanceId 流程实例ID
     * @param taskName  任务名称
     * @param userCode  用户代码
     */
    void transferTask(BpmProcessEnum processEnum, String businessKey,
                      String processInstanceId, String taskName, String userCode);

    /**
     * <p>添加批注
     * @param processInstance
     * @param taskId 任务ID
     * @param message 批注内容
     */
    void addComment(String processInstance, String taskId, String message);

    /**
     * <p>获取批注
     * @param taskId    任务ID
     */
    String getComment(String taskId);



}


/*

    // 开启流程
    ProcessInstance startProcess(String definitionKey, String businessKey, Map<String, Object> var);
    // 获取某流程下正在执行的任务信息
    Task getTaskInfo(String definitionKey, String businessKey, String processInstanceId, String taskId);
    // 办理任务
    void handleTask(String taskId , Map<String, Object> var);
    // 添加批注
    void addComment(String taskId, String processInstance, String message);
    // 获取批注
    String getComment(String taskId);
    // 获取当前流程实例下该用户正在执行的任务信息
    List<Task> queryTaskByAssignee(String definitionKey, String businessKey, String processInstanceId, String assignee);
    // 获取某一任务节点下该用户正在执行的任务信息
    Task queryTaskByAssigneeAndName(String definitionKey, String businessKey, String processInstanceId, String taskName, String assignee);
    // 根据processInstanceId获取正在执行的任务信息
    Task queryTaskByProcessInstanceId(String definitionKey, String businessKey, String processInstanceId);
    // 获取某一类任务节点下正在执行的任务信息
    Task queryTaskByTaskNames(String definitionKey, String businessKey, String processInstanceId, List<String> taskNameList);
    // 获取某一类任务节点下、某一执行流下正在执行的任务信息
    Task queryTaskByTaskNamesAndExecutionId(String definitionKey, String businessKey, String processInstanceId, String executionId, List<String> taskNameList);
    // 获取某一类任务节点下、某一执行流下的历史活动信息
    List<HistoricActivityInstance> queryHisActivityByTaskNamesAndExecutionId(String processInstanceId, String executionId);
    // 根据taskId查询历史任务
    HistoricTaskInstance queryHisTaskByTaskId(String definitionKey, String businessKey, String processInstanceId, String taskId);
    // 根据taskId和taskName查询历史任务
    HistoricTaskInstance queryHisTaskByTaskIdAndName(String definitionKey, String businessKey, String processInstanceId, String taskName, String taskId);
    // 根据id查询历史流程实例
    HistoricProcessInstance queryHistoricProcessInstanceById(String definitionKey, String businessKey, String processInstanceId);
    // 移交任务
    void transferTask(String definitionKey, String businessKey, String processInstanceId, String taskName, String taskId, String userCode);
    // 根据businessKey查询所有历史任务
    List<HistoricTaskInstance> queryHisTaskByBusinessKey(String definitionKey, String businessKey);
    // 根据processInstanceId查询所有历史活动任务
    List<HistoricActivityInstance> queryHistoricActivityInstanceByProcessInstanceId(String processInstanceId);
    // 根据id查询正在进行中的工作流
    ProcessInstance queryProcessInstanceById(String definitionKey, String businessKey, String processInstanceId);
    // 根据id删除工作流
    void removeProcessInstanceById(String processInstanceId, String msg);

 */